package com.cskaoyan.service;

import com.cskaoyan.bean.entity.Brand;
import com.cskaoyan.bean.entity.BrandExample;
import com.cskaoyan.bean.entity.Region;
import com.cskaoyan.bean.entity.RegionExample;
import com.cskaoyan.bean.vo.*;
import com.cskaoyan.mapper.BrandMapper;
import com.cskaoyan.mapper.RegionMapper;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

/**
 * @author XuBang
 * @TODO:
 * @date 2021/10/19$
 * @trainOfthought:
 */
@Service
public class AdministrativeRegionServiceImpl implements AdministrativeRegionService {
    @Autowired
    RegionMapper regionMapper;

//    @Autowired
//    BrandMapper brandMapper;

    /**
     * 行政区域
     * @return
     */
    @Override
    public BasePageData list() {
        /**
         * 根据1对多的思路：有1才有多，所以：先有“1”的数据；根据list.add可以添加“多”的部分
         */
        //1.查询type=1的省数据
        RegionExample example = new RegionExample();
        RegionExample.Criteria criteria = example.createCriteria();
        criteria.andTypeEqualTo(1);   //根据type查询所有省级数据
        example.setOrderByClause("id");     //根据id字段进行排序
        List<Region> regions = regionMapper.selectByExample(example);

        //2.查询type=2的市数据存到type=1的成员变量children list中
        RegionExample example1 = new RegionExample();
        RegionExample.Criteria criteria1 = example1.createCriteria();
        criteria1.andTypeEqualTo(2);
        example1.setOrderByClause("id");
        List<Region> regions1 = regionMapper.selectByExample(example1);

        //3.查询type=3的区数据存到type=2的成员变量children list中
        RegionExample example2 = new RegionExample();
        RegionExample.Criteria criteria2 = example2.createCriteria();
        criteria2.andTypeEqualTo(3);
        example2.setOrderByClause("id");
        List<Region> regions2 = regionMapper.selectByExample(example2);

//        List<AdminListVo1> adminListVo1 = (List<AdminListVo1>) new AdminListVo1();
//        AdminListVo1 adminListVo1 = new AdminListVo1();
        ArrayList<AdminListVo1> adminListVo1s = new ArrayList<>();   //存储省级list--->省级的list应该是全局的
        //4.嵌套封装
        for (Region region : regions) {   //遍历省级区域
            ArrayList<ChildrenDTO2> childrenDTO2s = new ArrayList<>();   //存储市级list：存储省级具体信息--->市级的list不应该是全局；否则，会出现市级的查询结果叠加在一起的情况
            AdminListVo1 adminListVo1 = new AdminListVo1();   //创建省级对象
            adminListVo1.setId(region.getId());        //存储省级id(基本信息)
            adminListVo1.setName(region.getName());
            adminListVo1.setType(region.getType());
            adminListVo1.setCode(region.getCode());
            for (Region region1 : regions1) {   //遍历市级区域
                ArrayList<ChildrenDTO3> childrenDTO3s = new ArrayList<>();   //存储区级list--->区级list同样如此；不应该全局
                if(region.getId()==region1.getPid()){   //一个市的pid  等于  对应省的id
//                    regions.add(region1);    //思考：如何将市的数据放到省的数据中--->分析表的嵌套结构
                    //最终返回一个省级的list
                    ChildrenDTO2 childrenDTO2 = new ChildrenDTO2();  //创建市级对象：存储市级具体信息
                    childrenDTO2.setId(region1.getId());    //存储市级id（基本信息）
                    childrenDTO2.setCode(region1.getCode());
                    childrenDTO2.setName(region1.getName());
                    childrenDTO2.setType(region1.getType());
                    //添加children
                    //重复同样的操作
                    for (Region region2 : regions2) {   //遍历区级信息
                        if(region1.getId()==region2.getPid()){   //区级信息pid对应市级信息id
                            ChildrenDTO3 childrenDTO3 = new ChildrenDTO3();    //创建区级信息对象
                            childrenDTO3.setId(region2.getId());  //存储区级信息的基本信息id
                            childrenDTO3.setName(region2.getName());
                            childrenDTO3.setCode(region2.getCode());
                            childrenDTO3.setType(region2.getType());
                            childrenDTO3s.add(childrenDTO3);   //将单个区级信息存储到区级list中
                        }
                    }

                    childrenDTO2.setChildren(childrenDTO3s);   //存储市级以下的区级信息list
                    childrenDTO2s.add(childrenDTO2);        //将单个市级信息存储到市级list中
                }
            }
            adminListVo1.setChildren(childrenDTO2s);   //存储省级下的市级信息（list信息）
            adminListVo1s.add(adminListVo1);           //将单个省级信息存储到省级list中
//            System.out.println(adminListVo1);
        }

        return BasePageData.ok(adminListVo1s);
    }

//    /**
//     * 品牌制造商
//     * @param id
//     * @param name
//     * @param baseParam
//     * @return
//     */
//    @Override
//    public BasePageData brandLcist(Integer id, String name, BaseParam baseParam) {
//        //0.分页处理
//        PageHelper.startPage(baseParam.getPage(),baseParam.getLimit());
//
//        //1.条件规定
////        FeedbackExample example = new FeedbackExample();
////        FeedbackExample.Criteria criteria = example.createCriteria();
//        BrandExample example = new BrandExample();
//        BrandExample.Criteria criteria = example.createCriteria();
//        if(id!=null){
//            criteria.andIdEqualTo(id);
//        }
//        if(name!=null && !"".equals(name)){
//            criteria.andNameLike("%"+name+"%");
//        }
//
//        //2.排序处理
//        example.setOrderByClause(baseParam.getSort()+" "+baseParam.getOrder());
//        //3.具体查询
//        List<Brand> brands = brandMapper.selectByExample(example);
//
//        return BasePageData.ok(brands);
//    }
}
